多进程设计完成并调试通过

chengzhenyu 7 年之前
父节点
当前提交
4b33b65384

+ 1 - 1
.idea/misc.xml

@@ -37,7 +37,7 @@
37 37
     <ConfirmationsSetting value="0" id="Add" />
38 38
     <ConfirmationsSetting value="0" id="Remove" />
39 39
   </component>
40
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8 (1)" project-jdk-type="JavaSDK">
40
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="JDK" project-jdk-type="JavaSDK">
41 41
     <output url="file://$PROJECT_DIR$/build/classes" />
42 42
   </component>
43 43
   <component name="ProjectType">

+ 27 - 3
app/src/main/java/ai/pai/lensman/dslr/CameraService.java

@@ -42,6 +42,9 @@ public class CameraService extends Service {
42 42
     private static final String MSG_TYPE_NOT_INIT = "not init";  //需要初始化
43 43
     private static final String MSG_TYPE_TIME_OUT = "time out";  //继续调用waitforevent
44 44
 
45
+    private static final int MAX_NO_PHOTO_COUNT = 500;
46
+    private int count = 0;
47
+
45 48
     @Override
46 49
     public IBinder onBind(Intent intent) {
47 50
         return null;
@@ -49,17 +52,22 @@ public class CameraService extends Service {
49 52
 
50 53
     @Override
51 54
     public int onStartCommand(Intent intent, int flags, int startId) {
55
+        LogHelper.d("czy","CameraService onStartCommand  ");
52 56
         if(intent!=null&&intent.getIntExtra(EXTRA_CMD,0)>0){
53 57
             int cmd = intent.getIntExtra(EXTRA_CMD,0);
54 58
             if(cmd == CMD_EXIT_CAMERA_CONNECTION){
59
+                LogHelper.d("czy","CameraService 收到停止进程任务");
55 60
                 stopCameraService();
56 61
             }else if(cmd == CMD_INIT_CAMERA_CONNECTION){
57 62
                 if(!isInitExecuted){
63
+                    LogHelper.d("czy","CameraService 收到重启进程任务");
64
+                    count = 0;
58 65
                     cameraInitTask = new CameraInitTask();
59 66
                     cameraInitTask.execute();
60 67
                 }
61 68
             }else if(cmd == CMD_START_CAPTURE_PHOTO){
62 69
                 if(isInitExecuted){
70
+                    LogHelper.d("czy","CameraService 收到开始拍摄任务");
63 71
                     sessionWorkingDirPath = intent.getStringExtra(EXTRA_SESSION_DIR);
64 72
                     if(!TextUtils.isEmpty(sessionWorkingDirPath)){
65 73
                         startCapture();
@@ -76,6 +84,8 @@ public class CameraService extends Service {
76 84
     }
77 85
 
78 86
     private void stopCameraService(){
87
+        count = 0;
88
+        LogHelper.d("czy","CameraService stopCameraService  ");
79 89
         if(cameraInitTask!=null){
80 90
             cameraInitTask.cancel();
81 91
         }
@@ -99,6 +109,7 @@ public class CameraService extends Service {
99 109
 
100 110
         @Override
101 111
         protected Integer doInBackground(Void... params) {
112
+            LogHelper.d("czy","CameraService CameraInitTask  ");
102 113
             isInitExecuted = true;
103 114
              return  CameraJNIInterface.getInstance().java_mygpcamerainit();
104 115
         }
@@ -110,10 +121,12 @@ public class CameraService extends Service {
110 121
                 return;
111 122
             }
112 123
             if(result>=0){
124
+                LogHelper.d("czy","CameraService 相机初始化成功");
113 125
                 Bundle bundle = new Bundle();
114 126
                 bundle.putInt(EXTRA_STATUS_PART,MSG_CAMERA_INIT_SUCCESS);
115 127
                 sendCameraIntent(bundle);
116 128
             }else{
129
+                LogHelper.d("czy","CameraService 相机初始化失败,杀掉进程");
117 130
                 Bundle bundle = new Bundle();
118 131
                 bundle.putInt(EXTRA_STATUS_PART, MSG_CAMERA_CONN_ERROR);
119 132
                 sendCameraIntent(bundle);
@@ -147,15 +160,17 @@ public class CameraService extends Service {
147 160
 
148 161
     private void fetchPhotoTask(){
149 162
         if(!isLastQueryReturned){
150
-            LogHelper.d("czy","fetchPhotoTask last query not finished,return ");
163
+            LogHelper.d("czy","CameraService fetchPhotoTask last query not finished,return ");
151 164
             return;
152 165
         }
153 166
 
154 167
         isLastQueryReturned = false;
155 168
         String eventMsg = CameraJNIInterface.getInstance().java_mygpcamerawaitforevent(sessionWorkingDirPath);
156
-        LogHelper.d("czy","mygpcamerawaitforevent return result = "+eventMsg);
169
+        LogHelper.d("czy","CameraService mygpcamerawaitforevent return result = "+eventMsg);
157 170
         if(eventMsg!=null && eventMsg.length()>0){
171
+            count = 0;
158 172
             if(MSG_TYPE_NOT_INIT.equalsIgnoreCase(eventMsg)||MSG_TYPE_CAMERA_ERROR.equalsIgnoreCase(eventMsg)){
173
+                LogHelper.d("czy","CameraService fetchPhotoTask 相机连接错误,重新连接试试");
159 174
                 Bundle bundle = new Bundle();
160 175
                 bundle.putInt(EXTRA_STATUS_PART, MSG_CAMERA_CONN_ERROR);
161 176
                 sendCameraIntent(bundle);
@@ -165,13 +180,22 @@ public class CameraService extends Service {
165 180
             }else{
166 181
                 String sub = eventMsg.substring(0,1);
167 182
                 if(TextUtils.isDigitsOnly(sub)){
168
-                    LogHelper.d("czy","fetchPhotoTask new photo found");
183
+                    LogHelper.d("czy","CameraService fetchPhotoTask new photo found");
169 184
                     Bundle bundle = new Bundle();
170 185
                     bundle.putInt(EXTRA_STATUS_PART, MSG_CAMERA_NEW_PHOTO_FOUND);
171 186
                     bundle.putString(EXTRA_DATA_PART,eventMsg);
172 187
                     sendCameraIntent(bundle);
173 188
                 }
174 189
             }
190
+        }else{
191
+            count++;
192
+            if(count>=MAX_NO_PHOTO_COUNT){
193
+                LogHelper.d("czy","CameraService fetchPhotoTask 太久没发现新照片了,重新连接试试");
194
+                Bundle bundle = new Bundle();
195
+                bundle.putInt(EXTRA_STATUS_PART, MSG_CAMERA_CONN_ERROR);
196
+                sendCameraIntent(bundle);
197
+                stopCameraService();
198
+            }
175 199
         }
176 200
 
177 201
         isLastQueryReturned = true;

+ 8 - 1
app/src/main/java/ai/pai/lensman/session/SessionInteractor.java

@@ -24,6 +24,7 @@ import static ai.pai.lensman.dslr.CameraService.CMD_INIT_CAMERA_CONNECTION;
24 24
 import static ai.pai.lensman.dslr.CameraService.CMD_START_CAPTURE_PHOTO;
25 25
 import static ai.pai.lensman.dslr.CameraService.EXTRA_CMD;
26 26
 import static ai.pai.lensman.dslr.CameraService.EXTRA_DATA_PART;
27
+import static ai.pai.lensman.dslr.CameraService.EXTRA_SESSION_DIR;
27 28
 import static ai.pai.lensman.dslr.CameraService.EXTRA_STATUS_PART;
28 29
 import static ai.pai.lensman.dslr.CameraService.MSG_CAMERA_CONN_ERROR;
29 30
 import static ai.pai.lensman.dslr.CameraService.MSG_CAMERA_INIT_SUCCESS;
@@ -79,6 +80,7 @@ public class SessionInteractor implements Callback{
79 80
     public void startCapture() {
80 81
         Intent intent = new Intent(App.getAppContext(), CameraService.class);
81 82
         intent.putExtra(EXTRA_CMD,CMD_START_CAPTURE_PHOTO);
83
+        intent.putExtra(EXTRA_SESSION_DIR,sessionWorkingDirPath);
82 84
         App.getAppContext().startService(intent);
83 85
     }
84 86
 
@@ -91,7 +93,12 @@ public class SessionInteractor implements Callback{
91 93
         Intent intent = new Intent(App.getAppContext(), CameraService.class);
92 94
         intent.putExtra(EXTRA_CMD,CMD_EXIT_CAMERA_CONNECTION);
93 95
         App.getAppContext().startService(intent);
94
-        App.getAppContext().unregisterReceiver(cameraReceiver);
96
+        try{
97
+            App.getAppContext().unregisterReceiver(cameraReceiver);
98
+        }catch (Exception e){
99
+            e.printStackTrace();
100
+        }
101
+
95 102
         LogHelper.d("czy","endSession ");
96 103
         listener.onSessionEnd(sessionBean.sessionId);
97 104
     }